E4-Mission9-Portfolio-Baptiste-Grimaldi
Liens utiles
Le site:
(Utiliser un navigateur chromium pour une meilleure expérience)
Le repo du projet
session storage and cookie for passport.js
https://stackoverflow.com/questions/62894933/why-use-cookie-session-in-addition-to-passport-js
1. Introduction
Le but d'un portfolio de dĂ©veloppeur web fullstack est de prĂ©senter ses compĂ©tences, ses projets passĂ©s et ses rĂ©alisations Ă des employeurs potentiels, Ă des clients, Ă des partenaires et Ă toute personne qui souhaite en savoir plus sur ses capacitĂ©s. Le portfolio doit ĂȘtre professionnel, facile Ă naviguer, accessible et esthĂ©tiquement attrayant, et doit inclure les Ă©lĂ©ments clĂ©s tels que les compĂ©tences, les projets passĂ©s, les rĂ©alisations, les expĂ©riences professionnelles, ainsi qu'une prĂ©sentation de la personnalitĂ© et des passions du dĂ©veloppeur.
1.1 Présentation du projet de mon portfolio
1.2 Contexte de la mission
Dans le cadre de mon BST SIO, on me demande de rĂ©aliser pour mes productions. Ce support est bien plus quâun rendu dâĂ©preuve. Cela e permet de me mettre en valeur au prĂšs des recruteurs.
2. Expression fonctionnelle du besoin
2.1 Objectifs du portfolio
- Analyse des besoins : Il est important de comprendre les besoins du client et de l'utilisateur final afin de déterminer les fonctionnalités et les exigences du projet.
- Conception de l'architecture : Il s'agit de définir l'architecture de l'application, les composants et les technologies nécessaires pour réaliser le projet.
- Planification du projet : Il est important d'établir une liste de tùches, un calendrier et un budget pour s'assurer que le projet est achevé en temps voulu et dans les limites du budget.
- DĂ©veloppement du front-end : La conception de l'interface utilisateur et la mise en Ćuvre du front-end de l'application peuvent commencer une fois que l'architecture est en place. Il s'agit de crĂ©er une expĂ©rience utilisateur intuitive et attrayante.
- Développement du back-end : Le développement du back-end implique la création des fonctionnalités et des services nécessaires pour que l'application fonctionne de maniÚre efficace. Il est important de s'assurer que le back-end est extensible, évolutif et sécurisé.
- Tests et dĂ©bogage : Une fois le dĂ©veloppement terminĂ©, il est temps de tester l'application pour s'assurer qu'elle fonctionne correctement. Les tests devraient ĂȘtre effectuĂ©s Ă chaque Ă©tape du dĂ©veloppement, en utilisant des outils de dĂ©bogage pour rĂ©soudre les problĂšmes.
- DĂ©ploiement : AprĂšs avoir achevĂ© les tests et la correction des erreurs, l'application est prĂȘte Ă ĂȘtre dĂ©ployĂ©e. Cette Ă©tape implique la mise en place de l'infrastructure nĂ©cessaire pour que l'application fonctionne correctement.
- Maintenance et mise à jour : Une fois l'application déployée, il est important de la maintenir réguliÚrement et de la mettre à jour pour répondre aux besoins changeants des utilisateurs. La maintenance peut inclure la correction de bugs, la mise à jour de la sécurité et l'ajout de nouvelles fonctionnalités.
2.2 Public cible
Le publique ciblĂ© sont les personnes cherchant Ă se renseigner sur mes projets ou connaĂźtre mon parcours professionnel. Lâinterface doit donc ĂȘtre une dĂ©monstration rapide de mes capacitĂ©s. Il faut Ă©galement prendre en compte que des personnes peuvent se retrouver sur des articles de mon sites par rĂ©fĂ©rencement. Il faut donc que mon portfolio puisse Ă©galement remplir une fonction de simple blog.
Public ciblé
- Les personnes cherchant Ă se renseigner sur les projets et le parcours professionnel de l'auteur
- Les personnes qui dĂ©couvrent le portfolio par rĂ©fĂ©rencement et qui peuvent ĂȘtre intĂ©ressĂ©es par le contenu en gĂ©nĂ©ral
2.3 Fonctionnalités principales
Analyse du besoin
Mon besoin est de créer un portfolio personnel en ligne qui me permettra de présenter mes compétences, mes réalisations et mes projets passés. En créant un portfolio, je pourrais présenter mon travail et mes compétences à des employeurs potentiels, des clients, des partenaires ou à toute personne qui souhaite en savoir plus sur moi et mes capacités.
Un portfolio en ligne me permettra de :
- Monter en compétences : en travaillant sur différents projets personnels, j'ai appris de nouvelles compétences. En créant un portfolio, je pourrais consolider ces compétences et mettre en évidence mes réalisations.
- Valoriser mon travail : En tant que développeur, j'ai travaillé sur plusieurs projets par le passé, y compris des projets personnels. En créant un portfolio, je pourrais présenter mes projets terminés et montrer mes compétences en matiÚre de développement web.
- Renforcer ma crédibilité : En publiant des exemples de projets que j'ai réalisés, je pourrais renforcer ma crédibilité auprÚs des employeurs potentiels, des clients, des partenaires et des autres intervenants.
- Mieux me positionner sur le marché : Un portfolio en ligne me permettra de mieux me positionner sur le marché en mettant en évidence mes compétences, mes réalisations et mes projets passés. Cela me permettra également de me démarquer des autres candidats.
- Faciliter la recherche d'emploi : En ayant un portfolio en ligne, je pourrais facilement partager mes réalisations avec des employeurs potentiels et les aider à mieux comprendre mes compétences et mon potentiel.
En rĂ©sumĂ©, je souhaite crĂ©er un portfolio en ligne pour prĂ©senter mes compĂ©tences, mes projets passĂ©s et mes rĂ©alisations Ă des employeurs potentiels, des clients, des partenaires et Ă toute personne qui souhaite en savoir plus sur moi et mes capacitĂ©s. Mon portfolio doit ĂȘtre professionnel, facile Ă naviguer, accessible et esthĂ©tiquement attrayant. Les Ă©lĂ©ments clĂ©s de mon portfolio devraient inclure mes compĂ©tences, mes projets passĂ©s, mes rĂ©alisations, mes expĂ©riences professionnelles et une prĂ©sentation de ma personnalitĂ© et de mes passions.
Nous allons maintenant voir comment je peux reflĂ©ter ses points clĂ©s dans la structure et lâarchitecture de mon portfolio
Liste des analyses fonctionnelles du besoin
Front office:
La liste des fonctionnalités attendues sont:
Back office:
Articles:
- Ajouter un nouvel article
- Modifier un article existant
- Supprimer un article existant
- Afficher une liste d'articles avec leur titre, leur date de publication et leur auteur
- Rechercher un article par mot-clé ou par date de publication
Projets:
- Ajouter un nouveau projet
- Modifier un projet existant
- Supprimer un projet existant
- Afficher une liste de projets avec leur titre, leur date de création et leur description
- Rechercher un projet par mot-clé ou par date de création
Utilisateur:
- Modifier les informations de l'utilisateur (nom, prénom, adresse e-mail, mot de passe)
- Afficher les informations de l'utilisateur (nom, prénom, adresse e-mail)
- Supprimer le compte de l'utilisateur
- RĂ©initialiser le mot de passe
Je gÚre les fonctionnalités de back-office en utilisant une base de données MySQL et un ensemble d'API RESTful pour communiquer avec la base de données.
J'utilise Node.js et Express.js pour créer des API RESTful rapides et évolutives. Les API RESTful sont ensuite consommées par le front-end pour afficher les données dans l'interface utilisateur.
4. Description des environnements
4.1 Stack de technologies utilisé
Couche présentation (front-end)
- EJS est utilisé comme langage de modÚle pour générer des pages HTML dynamiquement.
- CSS est utilisé pour la mise en forme graphique des pages.
- JavaScript est utilisé pour la logique front-end.
Couche logique (back-end)
- Node.js est utilisé comme environnement d'exécution pour le code JavaScript cÎté serveur.
- Express est utilisé comme framework d'application web pour fournir un ensemble d'outils et d'utilitaires pour la construction d'applications web.
- Passport est utilisé comme middleware d'authentification pour Node.js qui fournit un ensemble de stratégies d'authentification pour différents types d'authentification.
Couche données
- LightSQL est utilisé pour la gestion de la base de données.
Le choix de cette architecture permet de séparer les différentes couches de l'application pour garantir une évolutivité et une modularité maximales. Chaque couche est responsable de sa propre fonctionnalité, ce qui facilite la maintenance et la mise à jour du systÚme.
4.2 Environnement de production
Lâenvironnement de production est une docker dĂ©ployĂ©e sur mes serveurs.
Voir la documentation de ma mission âHome-Labâ qui explique comment sont organisĂ©s mes serveurs.
J'ai choisi Docker comme environnement de production pour plusieurs raisons. Tout d'abord, cela me permet d'avoir un contrĂŽle total sur les conteneurs via un docker-compose, oĂč je peux dĂ©finir toutes les propriĂ©tĂ©s nĂ©cessaires.
Ensuite, Docker me permet de relancer facilement un conteneur tout frais en cas de problÚme, ce qui est trÚs utile pour maintenir la disponibilité de mon application.
Enfin, la conteneurisation offre de nombreux avantages en termes d'optimisation des ressources, ce qui peut m'aider à améliorer les performances de mon application tout en réduisant les coûts d'infrastructure.
4.3 Outils utilisés
IDE
Câest un IDE payant avec le quel jâai obtenue un partenariat avec lâĂ©cole IRIS de Strasbourg pour des licences Ă©tudiantes.
Stack en détail
Le choix des outils pour la réalisation d'un portfolio en tant que développeur web fullstack est crucial pour obtenir une application Web dynamique et performante avec une interface utilisateur intuitive et attrayante. Les outils disponibles pour les développeurs comprennent NodeJs, JavaScript, ThreeJs, PassportJs, MySQL et d'autres bibliothÚques.
- NodeJs est un environnement d'exécution JavaScript open source qui permet aux développeurs de créer des applications Web hautement évolutives et performantes. Il est basé sur le moteur JavaScript V8 de Google et permet aux développeurs de créer des applications Web rapides et évolutives. Node.js est également facilement extensible à l'aide de modules NPM (Node Package Manager) qui facilitent le développement de fonctionnalités supplémentaires.
- JavaScript est un langage de programmation de premier ordre pour le développement Web. Il permet aux développeurs de créer des pages Web interactives et réactives. Les bibliothÚques JavaScript telles que JQuery, AngularJS et ReactJS sont largement utilisées par les développeurs pour créer des interfaces utilisateur riches et réactives.
Pour ce projet jâutilise les derniĂšres normes ES6 en programmation type modules.
- ThreeJs est une bibliothÚque JavaScript open source pour la création de graphiques 3D en temps réel dans un navigateur Web. Elle est utilisée pour créer des animations 3D interactives, des visualisations de données et des jeux en ligne.
- PassportJs est une bibliothÚque d'authentification et d'autorisation pour NodeJs. Elle permet aux développeurs de gérer l'authentification des utilisateurs et de contrÎler l'accÚs aux ressources.
- MySQL est un systĂšme de gestion de base de donnĂ©es open source qui peut ĂȘtre utilisĂ© pour stocker des donnĂ©es de portefeuille. Il est un choix courant pour les dĂ©veloppeurs Web. Son dĂ©saventage est sa mise a lâĂ©chelle uniquement verticale.
Gestion de la base de données
Pour la gestion de la base de données, le trÚs bon outil open-source PhpMyAdmin est utilisé. Par la suite je développerai mon propre outil type CRM.
Ecriture des articles et projets
Pour lâĂ©criture des articles de ce portfolio jâutilise Notion. Notion est un outil formidable avec une trĂšs bonne interface utilisateur. Le gros avantage de notion est sa modularitĂ© ainsi que son Ă©criture âMarkDownâ.
Les articles sont ensuite intĂ©grĂ© Ă leurs propres pages de mon portfolio en passant par un moteur dâadaptation que jâai dĂ©veloppĂ©.
5. MĂ©thodologie
En tant que développeur web fullstack, l'adoption de méthodologies et de rigueur est d'une importance capitale. Il est essentiel de choisir une stratégie de versioning appropriée pour le projet en question, ainsi que pour la gestion des tests et de la documentation.
5.1 Méthodologie de développement
Quand on parle de programmation, rien ne vaut la pratique. Lorsqu'on pratique, on remarque trÚs vite l'importance de méthodologies.
On entend beaucoup de méthodes : Agile, Scrum, Agile-Scrum... On parle de Pomodoro et de l'importance de faire des pauses. Rien ne vaut la pratique, d'essayer différentes méthodologies.
Ce qui fonctionne pour moi, c'est un kanban et des sprints. Je me fixe des petits objectifs Ă sprinter et je garde un suivi de mes tĂąches avec un kanban sur Notion ou Trello.
Je ne dirais pas que jâutilise une mĂ©thodologie SCRUM car je ne suis pas un expert mais je pense mâen rapprocher.
Pour plus information jâinvite Ă lire ce trĂšs bon article:
5.2 Gestion de version
Bonnes pratiques
- ne commitez que des choses sur les mĂȘmes sujets (style, front, back, etc...)
- Si vous ne pouvez pas Ă©crire de messages de commit concis, cela indique trop de sujets dans le mĂȘme commit.
- Utilisez un titre et un corps avec seulement la commande commit et en ajoutant une ligne vide entre le titre et le corps.
git commit :: TITRECORPS \# rest comments
Stratégies de branching
- Une convention Ă©crite pour organiser l'Ă©quipe.
Deux options principales:
- DĂ©veloppement Mainline:
- quelques branches
- commits relativement petits
- normes de test de haute qualité
- Branches State, Release et Feature
- Deux types de branches différents qui remplissent des types de travail différents
- LongRunning
- existe tout au long de la vie du projet
- souvent, ils reflÚtent les "étapes" de votre cycle de vie de développement
- Short Running
- pour les nouvelles fonctionnalités, les corrections de bogues, le refactoring, les expériences
- sera supprimé aprÚs l'intégration (fusion/rebase)
- LongRunning
- Deux types de branches différents qui remplissent des types de travail différents
Deux exemples de stratégies de branching
- GitHub Flow
- trÚs simple, trÚs léger : seulement long-running
- branche ("main") + branches de fonctionnalités
- GitFlow
- plus de structure, plus de rĂšgles
- long-running : "main" + "develop"
- de courte durée : fonctionnalités, versions, correctifs
Pour la gestion de version de ce projet, jâai optĂ© pour une stratĂ©gie de branching avec un main, un dev et des branches pour les fonctionnalitĂ©s. Cette mĂ©thode de versioning permet de travailler sur plusieurs fonctionnalitĂ©s en parallĂšle tout en minimisant les conflits de code.
En rĂ©sumĂ©, la stratĂ©gie de versioning avec un main, un dev et des branches pour les fonctionnalitĂ©s est efficace pour travailler sur plusieurs fonctionnalitĂ©s en parallĂšle tout en minimisant les conflits de code. Les fonctionnalitĂ©s sont testĂ©es avant d'ĂȘtre fusionnĂ©es dans la branche principale, ce qui permet de garantir la qualitĂ© des fonctionnalitĂ©s intĂ©grĂ©es.
5.3 Gestion de tests
Etant seul développeur de ce site web, les phases de tests sont relativement rapides. et sont en trois phases.
- Test avant implĂ©mentation du âbug fixâ
- Test aprĂšs implĂ©mentation du âbug fixâ
- Rapport dans la âpull requestâ de correction de bug
5.4 Documentation
Je tiens à aborder ce point uniquement pour parler des commentaires et autres documentations rédigées autour du projet.
6. Mise en oeuvre
6.1 Conception de l'architecture
Quand je commence un projet, jâaime bien mettre les bases de mon projet:
- Organisation de mes dossiers
- Pour lâorganisation de mes dossiers que me base sur du MVC avec un dossier public pour les ressources
- Premier Readme
- organisation des fichiers de projet
- .gitignore
- dockerfile
- .env variables dâenvironnement avec
dotenv
- Premier commit
Le modÚle MVC (Model-View-Controller) est une architecture de conception qui permet de diviser une application en trois parties principales: le modÚle (Model), la vue (View) et le contrÎleur (Controller). Le modÚle représente la structure de données de l'application, la vue est responsable de l'interface utilisateur et le contrÎleur gÚre les interactions entre le modÚle et la vue.
Dans mon projet, j'ai organisé mes fichiers en utilisant le modÚle MVC. Le dossier app
contient les fichiers de configuration, de contrĂŽleurs et de modĂšles. Le dossier public
contient les ressources statiques, telles que les images, les fichiers CSS et JavaScript. Le dossier routes
contient les fichiers de routage qui déterminent la logique de l'application. Enfin, le dossier views
contient les fichiers de vue au format EJS.
Lorsqu'un utilisateur effectue une demande, le contrÎleur correspondant est appelé. Le contrÎleur effectue les opérations nécessaires sur le modÚle, puis renvoie les résultats à la vue correspondante. La vue utilise les données renvoyées pour afficher les informations à l'utilisateur.
Voici l'architecture de mon projet:
âââ app
â âââ config
â âââ controllers
â âââ models
âââ public
â âââ fonts
â â âââ Inter
â â âââ Roboto
â â âââ Source_Code_Pro
â âââ images
â âââ javascripts
â âââ media
â â âââ curriculum
â âââ model
â âââ stylesheets
âââ routes
âââ tmp
âââ views
âââ imported
âââ partials
Le dossier app
contient les fichiers de configuration, de contrĂŽleurs et de modĂšles. Le dossier public
contient les ressources statiques, telles que les images, les fichiers CSS et JavaScript. Le dossier routes
contient les fichiers de routage qui déterminent la logique de l'application. Le dossier views
contient les fichiers de vue au format EJS.
6.2 DĂ©veloppement du back-end
Mon backend de serveur Node.js pour mon projet est organisé de la maniÚre suivante:
Fichier app.js
Le fichier app.js
est le serveur qui se charge d'Ă©couter les requĂȘtes HTTP et de les rediriger en fonction. Il possĂšde toutes les librairies nĂ©cessaires pour faire un check des dĂ©pendances avant l'exĂ©cution du serveur.
Le fichier app.js
est organisé de la maniÚre suivante :
- Importation des librairies nécessaires
- DĂ©finition de la configuration du serveur
- DĂ©finition des routes
- Lancement du serveur
Fichiers de routes .js
Les fichiers de routes .js
sont appelés dans le fichier serveur. Ces routes appellent des modÚles ou des contrÎleurs.
Les fichiers de routes sont organisés de la maniÚre suivante :
- Importation des librairies nécessaires
- DĂ©finition des routes
- Exportation des routes
Fichiers d'applications (modĂšles ou contrĂŽleurs)
Les modÚles sont des fichiers cadres avec la logique de certains programmes. Les contrÎleurs se chargent quant à eux de la communication avec la base de données.
Les fichiers d'applications (modÚles ou contrÎleurs) sont organisés de la maniÚre suivante :
- Importation des librairies nécessaires
- DĂ©finition des fonctions
- Exportation des fonctions
Les vues
Les affichages sont gĂ©nĂ©rĂ©s cĂŽtĂ© client avec une renderer. Ici jâutilise Express avec lâextension de fichiers .ejs.
Les vues sont organisées dans le dossier views
. Les fichiers de vues utilisent le langage de modÚle EJS pour générer des pages HTML dynamiques. Les fichiers de vue incluent également des fichiers de style et des fichiers JavaScript pour la mise en forme graphique des pages et la logique front-end.
Dossier public
Le dossier public est défini par le serveur et toutes les ressources sont accessibles depuis ce dossier. Il contient tous les assets.
Le dossier public contient tous les fichiers statiques tels que les images, les fichiers CSS et JavaScript. J'ai organisé ce dossier en sous-dossiers pour faciliter la recherche et la gestion des fichiers.
SystĂšme dâauthentification
Pour l'authentification, j'ai utilisé une combinaison de cookies et de sessions pour stocker les informations d'identification de l'utilisateur.
La combinaison de cookies et de sessions est souvent utilisée pour stocker des informations d'identification de l'utilisateur, car cela permet de stocker les informations de maniÚre persistante et sécurisée, tout en minimisant le temps de latence entre les demandes. Lorsqu'un utilisateur se connecte, le serveur stocke des informations sur l'utilisateur dans une session, qui est stockée dans la base de données.
Lorsque l'utilisateur effectue une demande ultérieure, le serveur récupÚre les informations de session associées à l'identifiant de session stocké dans le cookie, et utilise ces informations pour déterminer qui est l'utilisateur et s'il est autorisé à accéder à la ressource demandée.
Dans le fichier de configuration de Passport, j'ai défini une fonction de sérialisation qui stocke l'identifiant de l'utilisateur dans la session, et une fonction de désérialisation qui récupÚre l'identifiant de l'utilisateur à partir de la session. J'ai également créé un objet cookie avec une durée de vie de deux heures, qui est envoyé au client lorsqu'il est authentifié.
Enfin, pour stocker les sessions dans une base de données SQL, j'ai utilisé la bibliothÚque express-mysql-session
, qui fournit une classe pour stocker les sessions dans une table de base de données MySQL. J'ai créé un nouvel objet sessionStore
en utilisant cette classe, et je l'ai passé à la fonction session()
d'Express pour stocker les sessions dans la base de données.
Cela permet de stocker les informations d'identification de l'utilisateur de maniÚre persistante et sécurisée, tout en minimisant le temps de latence entre les demandes.
Librairies
Je peux préciser que j'utilise le framework Express.js pour gérer les routes et la logique de l'application. J'ai également choisi d'utiliser la bibliothÚque mysql
(notons que sequelize
est une option trÚs adéquate aussi) pour la gestion de la base de données MySQL.
Voici des explications supplémentaires sur certaines des librairies utilisées dans ce projet :
- @sendgrid/[email protected] : une librairie JavaScript pour envoyer des e-mails avec SendGrid.
- [email protected] : une librairie pour le hashage des mots de passe.
- [email protected] : une librairie pour la gestion des variables d'environnement.
- [email protected] : un moteur de template JavaScript pour les pages web.
- [email protected] : une librairie pour les téléchargements de fichiers dans Express.
- [email protected] : une librairie pour la gestion des sessions avec MySQL et Express.
- [email protected] : une librairie pour la gestion des sessions avec Express.
- [email protected] : un framework Web minimaliste pour Node.js.
- [email protected] : une librairie pour la coloration syntaxique du code.
- [email protected] : une librairie pour la création de fichiers PDF à partir de pages HTML.
- [email protected] : un analyseur de Markdown pour Node.js.
- [email protected] : une librairie pour la manipulation des dates et des heures en JavaScript.
- [email protected] : un middleware pour la gestion des logs dans Express.
- [email protected] : un pilote MySQL pour Node.js.
- [email protected] : un outil pour le redémarrage automatique de l'application Node.js lors des modifications du code.
- [email protected] : une librairie pour l'accĂšs Ă l'API OpenAI.
- [email protected] : une stratégie d'authentification locale pour Passport.js.
- [email protected] : une librairie pour l'authentification dans Node.js.
- [email protected] : une librairie pour l'analyse des flux RSS.
- [email protected] : une librairie pour la création de graphiques en 3D dans le navigateur.
- [email protected] : une librairie pour la conversion de HTML en Markdown.
- [email protected] : une interface en ligne de commande pour Webpack.
- [email protected] : un module bundler pour JavaScript et ses dépendances.
En bref
Le dossier public contient tous les fichiers statiques tels que les images, les fichiers CSS et JavaScript. J'ai organisé ce dossier en sous-dossiers pour faciliter la recherche et la gestion des fichiers.
J'utilise le framework Express.js pour gérer les routes et la logique de l'application. J'ai également choisi d'utiliser la bibliothÚque mysql pour la gestion de la base de données MySQL.
Enfin, j'utilise plusieurs bibliothÚques pour des tùches spécifiques tels que l'envoi d'e-mails avec SendGrid, la création de fichiers PDF à partir de pages HTML, la coloration syntaxique du code, la manipulation des dates et des heures en JavaScript, l'analyse des flux RSS, la création de graphiques en 3D dans le navigateur, etc.
6.3 DĂ©veloppement du front-end
Pour mon front-end, j'ai opté pour une approche basique mais efficace. J'utilise le modÚle BEM (Block Element Modifier) pour organiser mon code HTML et CSS. Le CSS est écrit en SCSS pour une meilleure lisibilité du code, puis converti en CSS pour une meilleure compatibilité des navigateurs.
Organisation du CSS
Le CSS est organisé avec les fonctionnalités du SCSS.
L'organisation du CSS est divisée en trois fichiers principaux:
colors.scss
: fichier contenant les couleurs utilisées dans l'ensemble du site web.
main-style.scss
: fichier principal appelé sur toutes les pages, contenant les styles communs à toutes les pages.
- Fichiers de styles de page : chaque page a son propre fichier de style, nommé d'aprÚs la page correspondante (par exemple,
home-style.scss
pour la page d'accueil).
En outre, il existe des fichiers de style supplémentaires pour certains des éléments récurrents du site web, tels que la barre de navigation (header-style.scss
) et les styles de formulaire (login-style.scss
).
Dans main-style.scss
, les styles sont organisés par blocs, en utilisant la méthode BEM (Block Element Modifier). Les styles sont également organisés en utilisant les fonctionnalités de SCSS, telles que les variables, les mixins et les fonctions.
Optimisations
J'ai également pris soin de met en place un listener qui minimifier tous les scripts pour optimiser les temps de chargement de la page. J'ai également veillé à ce que toutes les images soient en format web pour une meilleure optimisation.
Le choix d'utiliser des images en format web est principalement motivé par la taille de ces fichiers. Les images en format web sont généralement plus légÚres que les images en format PNG ou JPEG, ce qui permet de réduire considérablement le temps de chargement de la page.
Communication serveur et BDD
Il est Ă noter que, pour des raisons Ă©videntes de contrĂŽle du flux de donnĂ©es, toutes les requĂȘtes vers la base de donnĂ©es sont gĂ©rĂ©es par le serveur via les routes. Cela permet de garantir l'intĂ©gritĂ© des donnĂ©es et d'Ă©viter tout risque de compromission de la sĂ©curitĂ© en provenance du front-end. En outre, cette mĂ©thode permet une gestion plus efficace de la base de donnĂ©es, car elle centralise toutes les requĂȘtes et les traitements de donnĂ©es en un seul endroit.
Cela permet aussi dâavoir un code mieux organiser et plus facile Ă maintenir.
6.4 Les grandes fonctionnalités de ce site
- Un thĂšme sombre : (Encore en bĂȘta)
- La veille automatisĂ© : Jâautomatise une partie de mon processus de veille. Je rĂ©cupĂšre des informations autour de ma veille via des flux RSS et les rĂ©sumes avec un LLM de OpenAI.
- Une interface de recherche : à travers tout mes projets avec les propriétés suivantes
- Recherche par catégories (une ou plusieurs)
- Recherche par texte dans le titre ou la description (Pour lâinstant âcase sensitiveâ)
- Recherche mixtes (catégories plus texte)
- SystĂšme de pagination
- Une page de contact : Relier Ă un systĂšme de mails vers la boite ma contact. [email protected]
- Une interface admin : (trĂšs basique)
- Permet de visualiser les logs
- Permet dâajouter un article avec un corp en html ou non et ajouter un pdf Ă tĂ©lĂ©charger.
- Lâauthentification est gĂ©rĂ©e avec
PassportJS
et une combinaison de session et de cookie.
7. Gestion de la maintenance corrective et Ă©volutive
Pour assurer la maintenance corrective de mon projet, j'ai mis en place un processus de qualité (QA) pour garantir que toutes les erreurs et les bugs sont corrigés rapidement et efficacement.
Tout d'abord, j'ai inclus un formulaire de contact sur mon site pour permettre aux utilisateurs de signaler tout problÚme qu'ils rencontrent. Ce formulaire est relié à ma boßte mail de contact, ce qui me permet de recevoir rapidement toutes les plaintes et de les traiter en conséquence.
Ensuite, j'utilise Github pour gĂ©rer toutes les mises Ă jour et les modifications de mon projet. Je peux facilement suivre toutes les modifications apportĂ©es Ă mon code et les tester avant de les dĂ©ployer sur mon site en production. En utilisant des branches et des pull requests, je suis en mesure de sĂ©parer les fonctionnalitĂ©s en cours de dĂ©veloppement de celles qui sont prĂȘtes Ă ĂȘtre dĂ©ployĂ©es.
Enfin, j'ai mis en place des tests automatiques pour m'assurer que toutes les fonctionnalités de mon projet fonctionnent correctement avant de les déployer en production. Les tests couvrent tous les aspects de mon projet, de la logique de l'application aux interfaces utilisateur.
8. Bilan du projet
8.1 Validation des exigences point par point
- Gérer le patrimoine informatique: Le document décrit la maniÚre dont le projet a été organisé et structuré, ainsi que les librairies et les outils utilisés pour le développement du site web. Il explique également comment les problÚmes ont été abordés et résolus.
- RĂ©pondre aux incidents et aux demandes dâassistance et dâĂ©volution: Le document inclut une section sur la gestion de la maintenance corrective et Ă©volutive, qui dĂ©crit comment les erreurs et les bugs sont corrigĂ©s et comment les mises Ă jour et les modifications sont gĂ©rĂ©es.
- DĂ©velopper la prĂ©sence en ligne de lâorganisation: Le document dĂ©crit comment le site web a Ă©tĂ© conçu et dĂ©veloppĂ© pour amĂ©liorer la prĂ©sence en ligne de l'organisation. Il dĂ©taille les fonctionnalitĂ©s du site web, ainsi que les outils et les librairies utilisĂ©s pour dĂ©velopper ces fonctionnalitĂ©s.
- Travailler en mode projet: Le document décrit comment le projet a été organisé et structuré, ainsi que les outils et les méthodes utilisés pour le développement du site web. Il décrit également comment les problÚmes ont été abordés et résolus.
- Mettre à disposition des utilisateurs un service informatique: Le document décrit comment le site web a été conçu et développé pour fournir un service aux utilisateurs. Il décrit les fonctionnalités du site web, ainsi que les outils et les librairies utilisés pour développer ces fonctionnalités.
- Organiser son développement professionnel: Le document décrit comment le projet a été organisé et structuré, ainsi que les outils et les méthodes utilisés pour le développement du site web. Il décrit également comment les problÚmes ont été abordés et résolus, et comment le processus de qualité a été mis en place pour assurer la maintenance corrective et évolutive du site web.
8.2 Axes d'amélioration
Lorsqu'on développe une application seul, on est souvent confronté à un manque d'organisation.
Avec le temps, je compte devenir de plus en plus Ă l'aise avec l'organisation lors de la mise en Ćuvre de mes projets, mais c'est dĂ©finitivement un axe d'amĂ©lioration.
9. Conclusion
9.1 SynthĂšse de la mission
J'ai réalisé une mission de développement web pour le projet E4-Mission9-Portfolio-Baptiste-Grimaldi. Dans le cadre de cette mission, j'ai conçu et développé un site web permettant d'améliorer la présence en ligne de l'organisation en fournissant un service aux utilisateurs.
Pour ce faire, j'ai utilisé le framework Express.js pour gérer les routes et la logique de l'application, ainsi que la bibliothÚque mysql pour la gestion de la base de données MySQL. J'ai également utilisé plusieurs autres bibliothÚques pour des tùches spécifiques telles que l'envoi d'e-mails avec SendGrid, la création de fichiers PDF à partir de pages HTML, la coloration syntaxique du code, la manipulation des dates et des heures en JavaScript, l'analyse des flux RSS, la création de graphiques en 3D dans le navigateur, etc.
Le site web comprend plusieurs fonctionnalités telles qu'un thÚme sombre, la veille automatisée, une interface de recherche, une page de contact, une interface admin et l'authentification gérée avec PassportJS et une combinaison de session et de cookie.
J'ai mis en place un processus de qualité (QA) pour garantir que toutes les erreurs et les bugs sont corrigés rapidement et efficacement. J'ai inclus un formulaire de contact sur mon site pour permettre aux utilisateurs de signaler tout problÚme qu'ils rencontrent, j'utilise Github pour gérer toutes les mises à jour et les modifications de mon projet, et j'ai mis en place des tests automatiques pour m'assurer que toutes les fonctionnalités de mon projet fonctionnent correctement avant de les déployer en production.
L'organisation du CSS est divisée en trois fichiers principaux : colors.scss
, main-style.scss
et les fichiers de styles de page. Les styles sont organisés par blocs, en utilisant la méthode BEM (Block Element Modifier), et en utilisant les fonctionnalités de SCSS, telles que les variables, les mixins et les fonctions.
Enfin, pour la gestion de l'authentification, j'ai utilisé une combinaison de cookies et de sessions pour stocker les informations d'identification de l'utilisateur, stockées dans une base de données SQL avec la bibliothÚque express-mysql-session
. Cette méthode permet de stocker les informations de maniÚre persistante et sécurisée, tout en minimisant le temps de latence entre les demandes.
L'ensemble de ces fonctionnalités et méthodes ont permis de développer un site web performant, sécurisé et facilement maintenable. Cependant, j'ai identifié l'organisation comme un axe d'amélioration pour mes projets futurs.
9.2 Perspectives futures
Je vois plusieurs axes d'amélioration pour mon projet Portfolio sachant que je compte sur lui tout au long de ma carriÚre.
Amélioration du systÚme de recherche
Je prévois d'améliorer le systÚme de recherche en ajoutant une barre de recherche disponible à tout moment sur le site pour chercher à travers tous les articles et projets. Cela permettra aux utilisateurs de trouver rapidement et facilement les informations qu'ils recherchent.
Augmentation du nombre d'articles
Je compte également augmenter le nombre d'articles sur mon site pour offrir plus de contenu aux utilisateurs. Je prévois de publier réguliÚrement de nouveaux articles pour continuer à améliorer la présence en ligne de mon organisation.
Ajout d'une section certifications
Je prévois également d'ajouter une section certifications pour mettre en avant mes compétences et mes réalisations. Cette section permettra aux utilisateurs de mieux comprendre mes qualifications et mes réalisations professionnelles.
En travaillant sur ces améliorations, je suis convaincu que mon site web continuera à s'améliorer et à offrir une expérience utilisateur de qualité aux utilisateurs.